﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using GC2.Bussines;
using GC2.Bussines.BMAdmin;
using GC2.Entities.Admin;
using GC2.Entities.Seguridad;
using GC2.ExceptionHandler;

public partial class Informes_FlujoFondos : GenericPage
{
    #region Propiedades
    Usuarios usuario = new Usuarios();
    Clientes clienteActual = new Clientes();    
    List<Clientes> listClientes = new List<Clientes>();
    private ExceptionConstructor exNew = new ExceptionConstructor();
    #endregion

    #region Controles

    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            SetearCultura();
            SetearConexion();
            if (!this.IsPostBack)
            {
                usuario = (Usuarios)Session["UsuarioActual"];
                Limpiar();

                DateTime dHoy = DateTime.Now.Date;
                FechaH.SetFecha(dHoy);
                string sFecha = SetearFecha();
                FechaD.SetFecha(Convert.ToDateTime(sFecha));

                rdbBalance.Checked = true;
                Session["Tipo"]= "Balance";
                rdbEgresos.Checked = false;
                rdbIngresos.Checked = false;
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }

    protected void btnCancelar_Click(object sender, EventArgs e)
    {
        Response.Redirect("~/Seguridad/Default.aspx", false);
    }

    protected void gvIngresos_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        try
        {
            gvIngresos.PageIndex = e.NewPageIndex;
            CargarIngresos();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }

    protected void gvEgresos_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        try
        {
            gvEgresos.PageIndex = e.NewPageIndex;
            CargarEgresos();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }

    protected void btnOtro_Click(object sender, EventArgs e)
    {
        try
        {
            Limpiar();
            List<Ingresos> listaIngresos = new List<Ingresos>();
            Session["listaIngresos"] = listaIngresos;
            gvIngresos.DataSource = listaIngresos;
            gvIngresos.DataBind();
            lblCIngresos.Text = "";
            lblTIngresos.Text = "";
            lblAccion.Text = "Seleccione Período y tipo de informe";

            List<Egresos> listaEgresos = new List<Egresos>();
            Session["listaEgresos"] = listaEgresos;
            gvEgresos.DataSource = listaEgresos;
            gvEgresos.DataBind();
            lblCEgresos.Text = "0";
            lblTEgresos.Text = "0";

            lblCantidad.Text = "";
            lblTotal.Text = "";

            rdbBalance.Checked = true;
            rdbEgresos.Checked = false;
            rdbIngresos.Checked = false;
        }
        catch (Exception ex) { ErrorUI(ex); }
    }


    #endregion

    #region Métodos

    #region Limpiar
    protected void Limpiar()
    {
        try
        {
            lblAccion.Text = "Seleccione Período y tipo de Informe";
            trEgresos.Visible = true;
            trIngresos.Visible = true;
            trBalance.Visible = true;
            lblCantidad.Text = "";
            lblTotal.Text = "";
            lblTGreen.Text = "";
            lblTRed.Text = "";
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion


    #endregion

    protected void btnVer_Click(object sender, EventArgs e)
    {
        try
        {
            if (FechaD.GetFecha() > FechaH.GetFecha())
            {
                // mensaje error en fecha
                mpeFecha.Show();
            }
            else
            {
                string sTipo = Session["Tipo"].ToString();

                if (sTipo != "Egresos")
                {
                    // Ingresos o Balance
                    Ingresos();
                }
                if (sTipo != "Ingresos")
                {
                    // Egresos o Balance
                    Egresos();
                }
                if (sTipo == "Balance")
                {
                    // Balance
                    Balance();
                }
                if (sTipo == "Ingresos")
                {
                    // Ingresos
                    trEgresos.Visible = false;
                    trBalance.Visible = false;
                }
                if (sTipo == "Egresos")
                {
                    // Egresos
                    trIngresos.Visible = false;
                    trBalance.Visible = false;
                }
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }


    protected void CargarIngresos()
    {
        try
        {
            List<Ingresos> listaIngresos = new List<Ingresos>();
            listaIngresos = (List<Ingresos>)Session["listaIngresos"];

            gvIngresos.DataSource = listaIngresos;
            gvIngresos.DataBind();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }

    protected void CargarEgresos()
    {
        try
        {
            List<Egresos> listaEgresos = new List<Egresos>();
            listaEgresos = (List<Egresos>)Session["listaEgresos"];

            gvIngresos.DataSource = listaEgresos;
            gvIngresos.DataBind();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }

    protected void Ingresos()
    {
        try
        {
            BMIngresos bmIngresos = new BMIngresos(Connection);
            Ingresos ingreso = new Ingresos();
            Ingresos ingresosD = new Ingresos();
            Ingresos ingresosH = new Ingresos();
            List<Ingresos> listaIngresos = new List<Ingresos>();
            int iCant = 0;
            Decimal dTotal = 0;

            ingresosD.Fecha = FechaD.GetFecha();
            ingresosH.Fecha = FechaH.GetFecha();
            listaIngresos = bmIngresos.BMIngresosSearch(ingresosD, ingresosH);

            if (listaIngresos.Count > 0)
            {
                foreach (Ingresos item in listaIngresos)
                {   
                    iCant++;
                    dTotal += item.Monto;
                }
                lblCIngresos.Text = iCant.ToString();
                lblTIngresos.Text = dTotal.ToString();
                lblAccion.Text = "Informe de INGRESOS para el período";
            }
            else
            {
                lblCIngresos.Text = "0";
                lblTIngresos.Text = "0";
                lblAccion.Text = "No hay INGRESOS en este período";
            }

            Session["listaIngresos"] = listaIngresos;

            ingreso.Id_Ingreso = iCant;
            ingreso.Monto = dTotal;
            Session["ingreso"] = ingreso;
            gvIngresos.DataSource = listaIngresos;
            gvIngresos.DataBind();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }

    protected void Egresos()
    {
        try
        {
            BMEgresos bmEgresos = new BMEgresos(Connection);
            Egresos egreso = new Egresos();
            Egresos egresosD = new Egresos();
            Egresos egresosH = new Egresos();
            List<Egresos> listaEgresos = new List<Egresos>();
            int iCant = 0;
            Decimal dTotal = 0;

            egresosD.Fecha = FechaD.GetFecha();
            egresosH.Fecha = FechaH.GetFecha();
            listaEgresos = bmEgresos.BMEgresosSearch(egresosD, egresosH);

            if (listaEgresos.Count > 0)
            {
                foreach (Egresos item in listaEgresos)
                {
                    iCant++;
                    dTotal += item.Monto;
                }
                lblCEgresos.Text = iCant.ToString();
                lblTEgresos.Text = dTotal.ToString();
                lblAccion.Text = "Informe de EGRESOS para el período";
            }
            else
            {
                lblCEgresos.Text = "0";
                lblTEgresos.Text = "0";
                lblAccion.Text = "No hay COMPRAS en este período";
            }

            Session["listaEgresos"] = listaEgresos;

            egreso.Id_Egreso = iCant;
            egreso.Monto = dTotal;
            Session["egreso"] = egreso;
            gvEgresos.DataSource = listaEgresos;
            gvEgresos.DataBind();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }

    protected void Balance()
    {
        try
        {
            Int32 iCantidad = Convert.ToInt32(lblCIngresos.Text) + Convert.ToInt32(lblCEgresos.Text);
            lblCantidad.Text = iCantidad.ToString();
            Decimal dResultado = Convert.ToDecimal(lblTIngresos.Text) - Convert.ToDecimal(lblTEgresos.Text);
            lblTotal.Text = dResultado.ToString();
            if (iCantidad > 0)
            {
                lblCantidad.Text = iCantidad.ToString();

                lblAccion.Text = "Resultado del período";
                if (dResultado > 0)
                {
                    lblTotal.Visible = false;
                    lblTGreen.Visible = true;
                    lblTGreen.Text = dResultado.ToString();
                }
                else
                {
                    lblTotal.Visible = false;
                    lblTRed.Visible = true;
                    lblTRed.Text = dResultado.ToString();
                }
            }
            else
            {
                lblCantidad.Text = "0";
                lblTotal.Text = "0";
                lblAccion.Text = "No hay Operaciones en este período";
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    protected void rdbEgresos_CheckedChanged(object sender, EventArgs e)
    {
        try
        {
            if (rdbEgresos.Checked)
            {
                Session["Tipo"] = "Egresos";
                rdbIngresos.Checked = false;
                rdbBalance.Checked = false;
                trEgresos.Visible = true;
                trIngresos.Visible = false;
                trBalance.Visible = false;
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    protected void rdbIngresos_CheckedChanged(object sender, EventArgs e)
    {
        try
        {
            if (rdbIngresos.Checked)
            {
                Session["Tipo"] = "Ingresos";
                rdbEgresos.Checked = false;
                rdbBalance.Checked = false;
                trIngresos.Visible = true;
                trEgresos.Visible = false;
                trBalance.Visible = false;
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    protected void rdbBalance_CheckedChanged(object sender, EventArgs e)
    {
        try
        {
            if (rdbBalance.Checked)
            {
                Session["Tipo"] = "Balance";
                rdbEgresos.Checked = false;
                rdbIngresos.Checked = false;
                trEgresos.Visible = true;
                trIngresos.Visible = true;
                trBalance.Visible = true;
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
}
